package interviewCode;


import cn.hutool.core.date.DateField;
import cn.hutool.core.date.DateUtil;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class InterViewItem1 {
    /**
     * 引用分类：地址引用和数值引用
     * 总结：基本数据类型默认值传递，引用数据类型默认引用传递
     */
    public static final String abc = "123";

    public static void main(String[] args) throws Exception {
//        action1:
        /**
         基本数据类型被引用，不会修改原数值集合数据对象一类，其相当于新建容器，内部被修改，修改的是最外侧的对象属性
         */
        List list1 = new ArrayList();
        int b = 5;
        int[] array = {1, 2, 3};
        /**
         * 深拷贝实现对象的值传递，实现方法如下：
         * */
        List listCopy = new ArrayList();
        listCopy.addAll(list1);

        run(list1, b, array);
        System.out.println(list1);
        System.out.println(b);
        System.out.println("数组的长度:" + array.length);


        Date date=DateUtil.offset(new Date(), DateField.DAY_OF_MONTH,-1);
        System.out.println(date);

//      action2:
        /**
         *      对象的赋值：地址指向同一个地方，其实存放地址是一样的，故而给第一个
         *       和第二个对象赋值，本身就是给一个对象赋值
         * */
        List list2 = new ArrayList();

        List list3 = list2;

        list2.add("1");
        list3.add("2");

        System.out.println(list2);
        System.out.println(list3);

//      action3:
//        final修饰的值不能被修改
//        System.out.println(abc="1");

    }


    public static void run(List list, int a, int[] array) {
        list.add("list元素");
        a = a + 5;
        array = new int[]{4, 5, 6, 7};
        System.out.println("方法内部的a值" + a);
    }


}
